package controllers;

import play.*;
import play.data.validation.Required;
import play.db.DB;
import play.mvc.*;
import utils.exceptions.BDException;

import java.sql.Date;
import java.sql.Time;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.swing.text.html.HTMLDocument.Iterator;

import dao.FachadaDAO;

import models.*;

public class Aula {
	public static void portalAdministrador() {
    	render("Application/portalAdministrador.html");
    }
	
	public static void aula() {
    	render("Aula/Aula.html");
    }
	
	public static void aulaAluno(){
		render("Aula/AulaAluno/AulaAluno.html");
	}
	
	public static void inserirAula() {
		List<Professor> professores = new ArrayList<Professor>();
		List<Disciplina> disciplinas = new ArrayList<Disciplina>();
		try {
			professores = FachadaDAO.getInstance().listarProfessores();
			disciplinas = FachadaDAO.getInstance().listarDisciplinas();
			render("Aula/cadastroAula.html", disciplinas, professores);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}    	
    }
	
	public static void editar(int idAula) {		
		try {
			Aula aula = FachadaDAO.getInstance().buscarAula(idAula);
			render("Aula/editarAula.html",aula);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}		
	}
	
	public static void buscarAula() {
		render("Aula/buscarAula.html");
	}	
	
	
	public static void exibirAula(Aula aula){		
		render("Aula/exibirAula.html",aula);	
	}
	
	
	public static void actionEditarAula(@Required int idAula, @Required String codDisc, @Required String data, @Required String horaInicio, @Required String horaFim){		
		if(validation.hasErrors()) {
			render("Aula/editar.html");
		}		
		Aula aula = new Aula();		
		try {
			aula = FachadaDAO.getInstance().buscarAula(idAula);			
			
			aula.setCodDisc(params.get("codDisc"));
			aula.setData(Date.valueOf(params.get("data")));
			aula.setHoraInicio(Time.valueOf(params.get("horaInicio")));
			aula.setHoraFim(Time.valueOf(params.get("horaFim")));
			
			FachadaDAO.getInstance().editarAula(aula);			
			
			render("Aula/exibirAula.html",aula);
			
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}		
	}
	
	public static void actionInserirAula(@Required String codDisc, @Required String professor, @Required String data, @Required String horaInicio, @Required String horaFim)throws BDException{
		
		if(validation.hasErrors()) {
			render("Aula/cadastroAula.html");
		}		
		
		Professor prof = FachadaDAO.getInstance().buscarProfessor(params.get("professor"));
		
		if(FachadaDAO.getInstance().buscarDisciplina(codDisc) == null){
			String retorno = "CÓDIGO DA DISCIPLINA NÃO EXISTE !";
			render("Aula/cadastroAula.html", retorno);
		}		
		String d = data;
		d.replace( "/", "");	
		  
		d = d.substring(6) + "-" +     
		d.substring(3, 5) + "-" +     
		d.substring(0, 2);     
		
		Aula aula = new Aula();
	
		aula.setCodDisc(params.get("codDisc"));
		aula.setData(Date.valueOf(d));			
		aula.setHoraInicio(Time.valueOf(params.get("horaInicio")));
		aula.setHoraFim(Time.valueOf(params.get("horaFim")));
		aula.setIdProfessor(prof.getIdProfessor());
		try {
			FachadaDAO.getInstance().cadastrarAula(aula);		
			String retorno = "AULA CADASTRADA COM SUCESSO !";
			render("Aula/cadastroAula.html", retorno);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
		
	
	public static void actionListarAula() {
    	List<Aula> aula = new ArrayList<Aula>();
		try {
			aula = FachadaDAO.getInstance().listarAulas();			
			render("Aula/listarAula.html", aula);
			
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
    }
	
	public static void listarAulaAluno() {
    	List<Aula> aula = new ArrayList<Aula>();
		try {
			aula = FachadaDAO.getInstance().listarAulas();			
			render("Aula/AulaAluno/listarAulaAluno.html", aula);
			
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
    }
	
	public static void listarAulaProf() {    		
		List<DisciplinaAula> disciplinas = new ArrayList<DisciplinaAula>();		
		disciplinas = FachadaDAO.getInstance().listarAulaProf(Application.getProf().getIdProfessor());
		Professor prof = Application.getProf();
		render("Disciplina/DisciplinaProf/listarDisciplinaProf.html",disciplinas,prof);
    }
	
	public static void actionRemover(int idAula) {
		try {
			FachadaDAO.getInstance().excluirAula(idAula);
			actionListarAula();
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	
	public static void actionBuscarAula(int idAula) {
		try {
			Aula aula = FachadaDAO.getInstance().buscarAula(idAula);
			render("Aula/buscarAula.html",aula);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void buscarAulaAluno(int idAula) {
		try {
			Aula aula = FachadaDAO.getInstance().buscarAula(idAula);
			render("Aula/AulaAluno/buscarAulaAluno.html",aula);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void actionBuscarListaAula(String codDisc) {
		List<Aula> aulas = new ArrayList<Aula>();		
		try {
			aulas = FachadaDAO.getInstance().buscarListaAula(codDisc);			 
			render("Aula/buscarAula.html",aulas);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void actionBuscarListaAulaAluno(String codDisc) {
		List<Aula> aulas = new ArrayList<Aula>();		
		try {
			aulas = FachadaDAO.getInstance().buscarListaAula(codDisc);			 
			render("Aula/AulaAluno/buscarAulaAluno.html",aulas);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
}
